/*
 * Copyright (c) 2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { isInteger } from '../../utils/number.js';
var n1 = 'number';
var n2 = 'number, number';
export function bitAndNumber(x, y) {
  if (!isInteger(x) || !isInteger(y)) {
    throw new Error('Integers expected in function bitAnd');
  }

  return x & y;
}
bitAndNumber.signature = n2;
export function bitNotNumber(x) {
  if (!isInteger(x)) {
    throw new Error('Integer expected in function bitNot');
  }

  return ~x;
}
bitNotNumber.signature = n1;
export function bitOrNumber(x, y) {
  if (!isInteger(x) || !isInteger(y)) {
    throw new Error('Integers expected in function bitOr');
  }

  return x | y;
}
bitOrNumber.signature = n2;
export function bitXorNumber(x, y) {
  if (!isInteger(x) || !isInteger(y)) {
    throw new Error('Integers expected in function bitXor');
  }

  return x ^ y;
}
bitXorNumber.signature = n2;
export function leftShiftNumber(x, y) {
  if (!isInteger(x) || !isInteger(y)) {
    throw new Error('Integers expected in function leftShift');
  }

  return x << y;
}
leftShiftNumber.signature = n2;
export function rightArithShiftNumber(x, y) {
  if (!isInteger(x) || !isInteger(y)) {
    throw new Error('Integers expected in function rightArithShift');
  }

  return x >> y;
}
rightArithShiftNumber.signature = n2;
export function rightLogShiftNumber(x, y) {
  if (!isInteger(x) || !isInteger(y)) {
    throw new Error('Integers expected in function rightLogShift');
  }

  return x >>> y;
}
rightLogShiftNumber.signature = n2;